package com.lsfb.light.Utils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;

import com.lsfb.light.Index.IndexActivity;
import com.lsfb.light.Login.LoginActivity;
import com.lsfb.light.R;
import com.zgscwjm.lsfbbasetemplate.LsfbAppManager;
import com.zgscwjm.lsfbbasetemplate.config.Config;
import com.zgscwjm.lsfbbasetemplate.utils.DensityUtils;
import com.zgscwjm.lsfbbasetemplate.utils.T;
import com.zgscwjm.lsfbbasetemplate.utils.valid.Valid;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by nonsense on 2017/9/14.
 */

public class LsfbUtils {

    public static final String UserID = "light_user";

    /**
     * 横向的自定义分割线(listview类recycleview)
     *
     * @param mContext
     * @param color
     * @param height
     * @return
     */
    public static RecycleViewDivider getVERTICALLineDivider(Context mContext, int color, int height) {
        return new RecycleViewDivider(mContext, LinearLayoutManager.VERTICAL, DensityUtils.dp2px(mContext, height), mContext.getResources().getColor(color));
    }

    /**
     * 纵向的自定义分割线(listview类recycleview)
     *
     * @param mContext
     * @param color
     * @param height
     * @return
     */
    public static RecycleViewDivider getHORIZONTALLineDivider(Context mContext, int color, int height) {
        return new RecycleViewDivider(mContext, LinearLayoutManager.HORIZONTAL, DensityUtils.dp2px(mContext, height), mContext.getResources().getColor(color));
    }

    /**
     * 设置并且开始一个view的旋转动画
     *
     * @param mContext
     * @param view
     */
    public static void GetRoundAniAndStartAnimation(Context mContext, View view) {
        Animation circle_anim = AnimationUtils.loadAnimation(mContext, R.anim.anim_round_rotate);
        LinearInterpolator interpolator = new LinearInterpolator();  //设置匀速旋转，在xml文件中设置会出现卡顿
        circle_anim.setInterpolator(interpolator);
        if (circle_anim != null) {
            view.startAnimation(circle_anim);  //开始动画
        }
    }

    /**
     * 停止一个view的旋转动画(通过clear方法)
     *
     * @param view
     */
    public static void StopAnimation(View view) {
        view.clearAnimation();
    }


    /**
     * 颜色渐变
     *
     * @param startValue
     * @param endValue
     * @param fraction
     * @return
     */
    public static int evaluateColor(int startValue, int endValue, float fraction) {
        if (fraction <= 0) {
            return startValue;
        }
        if (fraction >= 1) {
            return endValue;
        }
        int startInt = startValue;
        int startA = (startInt >> 24) & 0xff;
        int startR = (startInt >> 16) & 0xff;
        int startG = (startInt >> 8) & 0xff;
        int startB = startInt & 0xff;

        int endInt = endValue;
        int endA = (endInt >> 24) & 0xff;
        int endR = (endInt >> 16) & 0xff;
        int endG = (endInt >> 8) & 0xff;
        int endB = endInt & 0xff;

        return ((startA + (int) (fraction * (endA - startA))) << 24) | ((startR + (int) (fraction * (endR - startR))) << 16) | ((startG + (int) (fraction * (endG - startG))) << 8) | ((startB + (int) (fraction * (endB - startB))));
    }

    /**
     * 对目标Drawable 进行着色
     *
     * @param drawable 目标Drawable
     * @param color    着色的颜色值
     * @return 着色处理后的Drawable
     */
    public static Drawable tintDrawable(@NonNull Drawable drawable, int color) {
        Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
        DrawableCompat.setTint(wrappedDrawable, color);
        return wrappedDrawable;
    }

    /**
     * 对目标Drawable 进行着色
     *
     * @param drawable 目标Drawable
     * @param colors   着色值
     * @return 着色处理后的Drawable
     */
    public static Drawable tintListDrawable(@NonNull Drawable drawable, ColorStateList colors) {
        Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
        // 进行着色
        DrawableCompat.setTintList(wrappedDrawable, colors);
        return wrappedDrawable;
    }

    /**
     * 跳转登录界面的登录判断
     *
     * @param context
     * @return
     */
    public static boolean CheckLogin(Context context) {
        if (!Valid.noNull(Config.getUserId())) {
            T.showShort(context, "尚未登录");
            context.startActivity(new Intent(context, LoginActivity.class));
            return false;
        }
        return true;
    }

    /**
     * 带toast的登录判断
     *
     * @param context
     * @return
     */
    public static void TokenError(Context context) {
        exit(context);
        LsfbAppManager.getAppManager().finishActivity(IndexActivity.class);
        context.startActivity(new Intent(context, LoginActivity.class));
    }

    public static void exit(Context context) {
        Config.setUserId("");

    }


//    /**
//     * 登录成功后，需要保存userid到本地，以便自动登录
//     * @param context
//     * @param userid
//     */
//    public static void LoginSuccess(Context context,String userid){
//        SPUtils.remove(context,UserID);
//        SPUtils.put(context,UserID,userid);
//        LsfbLog.e("登录成功");
//    }
//
//
//    /**
//     *
//     * 获取本地存储的userid
//     * @param context
//     */
//    public static void GetUserId(Context context){
//       String userid= (String) SPUtils.get(context,UserID,"0");
//        if (userid!="0")
//        {
//            Config.setUserId(userid);
//        }
//        else
//        {
//            LsfbLog.e("登录失效");
//        }
//
//    }
//
//
//
//    public static void LoginOut(Context context) {
//
//
//    }

    /**
     * 回到首页并且重新加载首页
     */
    public static void BackIndex(Context mContext) {
        LsfbAppManager.getAppManager().finishAllActivity();
        mContext.startActivity(new Intent(mContext, IndexActivity.class));
    }


    /**
     * 把图片从drawable复制到sdcard中
     *
     * @param mContext
     */
    public static void initImagePath(Context mContext) {
        InputStream is = null;
        FileOutputStream fos = null;
        File file;
        try {
            String path = android.os.Environment.getExternalStorageDirectory()
                    .getPath();
            path = path + "/Fridom";

            String dbPathAndName = path + "/" + "icon_app.png";

            file = new File(path);

            if (file.exists() == false) {

                file.mkdir();
            }

            File dbFile = new File(dbPathAndName);
            if (!dbFile.exists()) {
                // TODO: 2017/12/21 0021 这里报错无需管它
                is = mContext.getResources().openRawResource(+R.drawable.icon_app);
//                is = mContext.getResources().openRawResource(R.raw.icon_app);
                fos = new FileOutputStream(dbFile);

                byte[] buffer = new byte[8 * 1024];// 8K
                while (is.read(buffer) > 0)// >
                {
                    fos.write(buffer);
                }
            }

        } catch (Exception e) {

        } finally {
            try {
                if (is != null) {
                    is.close();
                }

                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            }
        }
    }

    /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {
        /*
        移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		联通：130、131、132、152、155、156、185、186
		电信：133、153、180、189、（1349卫通）/^0?1[3|4|5|7|8][0-9]\d{8}$/
		总结起来就是第一位必定为1，第二位必定为3或5或8或7（电信运营商），其他位置的可以为0-9
		*/
        String telRegex = "[1][34578]\\d{9}";//"[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobiles))
            return false;
        else
            return mobiles.matches(telRegex);
    }

    /**
     * 判断是否是连续重复数字
     */
    public static boolean isNumberNO(String password) {

        String telRegex = "([0-9])\\1{5}";
        String telRefex = "^[0-9]{6}$##^|123456|234567|345678|654321|765432|876543|456789|987654|012345|543210|098765|567890|(\\\\d{1})\\\\1\\\\1(\\\\d{1})\\\\2\\\\2|(\\\\d{3})\\\\3|(\\\\d{1})\\\\4(\\\\d{1})\\\\5(\\\\d{1})\\\\6|(\\\\d{1})(\\\\d{1})\\\\7\\\\8\\\\7\\\\8|\\\\d{1}\\\\d{1}(\\\\d{1})\\\\9{3}|(\\\\d{1})\\\\10{3}\\\\d{1}\\\\d{1}|(\\\\d{1})\\\\11{4}\\\\d{1}|\\\\d{1}(\\\\d{1})\\\\12{4}$";
        if (TextUtils.isEmpty(password)) {
            return false;
        }
        if (password.matches(telRefex)) {
            return true;
        }
        if (password.matches(telRegex)) {
            return true;
        }
        return false;
    }

    /**
     * 去除HTML标签
     *
     * @param htmlStr
     * @return
     */
    public static String delHTMLTag(String htmlStr) {
        String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式
        String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式
        String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式

        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
        Matcher m_script = p_script.matcher(htmlStr);
        htmlStr = m_script.replaceAll(""); //过滤script标签

        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
        Matcher m_style = p_style.matcher(htmlStr);
        htmlStr = m_style.replaceAll(""); //过滤style标签

        Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
        Matcher m_html = p_html.matcher(htmlStr);
        htmlStr = m_html.replaceAll(""); //过滤html标签

        return htmlStr.trim(); //返回文本字符串
    }


    public static String VaildPrice(String s) {
        if (s.indexOf(".") != -1) {
            s = s.substring(0, s.indexOf(".")) + "." + s.substring(s.indexOf("."), s.length()).replace(".", "");
            if ((s.substring(s.indexOf("."), s.length())).replace(".", "").length() > 1) {
                String start = s.substring(0, s.indexOf("."));
                start = dismissZero(start);
                System.out.println("前:" + start);
                String end = ((s.substring(s.indexOf("."), s.length())).replace(".", "")).substring(0, 1);
                System.out.println("后:" + end);
                s = start + (end.isEmpty() ? "" : "." + end);
            } else {
                s = dismissZero(s);
            }
        } else {
            s = dismissZero(s);
        }
        s = addZero(s);
        return s;
    }

    public static String addZero(String u) {
        if (u.indexOf(".") == 0) {
            u = "0" + u;
        }
        if (u.charAt(u.length() - 1) == 46) {
            u = u + "0";
        }
        if (Double.valueOf(u) == 0) {
            u = "0";
        }
        return u;
    }

    public static String dismissZero(String u) {
        boolean canadd = false;
        String tmp = "";
        for (int i = 0; i < u.length(); i++) {
            if (u.charAt(i) != 48 && !canadd) {
                canadd = true;
            }
            if (canadd) {
                tmp = tmp + u.charAt(i);
            }
        }
        if (tmp.isEmpty()) {
            tmp = "0";
        }
        return tmp;
    }

    /**
     * 刷新响铃
     *
     * @param constant
     */
    public static void refresh(Activity constant) {
//        if (Constant.IsSound) {
//            MediaPlayer.create(constant, R.raw.duang).start();
//        }
    }


}
